import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'BaseLogic.dart';

/**
 * @author liu.xinyi
 * @time 2022/1/14 09:40
 * @desc  所有的 StatefulWidget 都用这个  省掉了写 State， 同时会自动处理 GetxController 的回收
 * 如果是静态的 widget 没有动态 view，或者不需要 Get.put(xxx) 继承另外的 BaseLessWidget
 */
abstract class BaseFulWidget<T extends BaseLogic> extends StatefulWidget {

  //是否自动销毁 GetxController
  bool delete = true;

  BaseFulWidget({Key? key}) : super(key: key);

  /**
   * 创建数据logic
   *  如果需要跨widget使用，则使用
   *  Get.put(T());
   *  如果只是单界面使用，直接new T()即可
   */
  T buildLogic();

  T get logic => buildLogic();

  // T get controller => GetInstance().find<T>(tag: tag);
  Widget baseBuild(BuildContext context) {
    logic.context = context;
    return build(context);

  }

  @protected
  Widget build(BuildContext context);

  @protected
  void initState(){

  }

    // @protected
  // Bindings? binding();


  @override
  _AutoDisposeState createState() => _AutoDisposeState<T>();
}

class _AutoDisposeState<S extends BaseLogic> extends State<BaseFulWidget> {
  _AutoDisposeState();

  @override
  Widget build(BuildContext context) {
    return widget.baseBuild(context);
  }

  @override
  void initState() {
    super.initState();
    widget.initState();
  }

  @override
  void dispose() {
    if (widget.delete) {
      print("移除 logic");
      Get.delete<S>();
    }
    super.dispose();
  }
}
